package com.veer.shop.service.impl.admin;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import com.veer.shop.config.Constants;
import com.veer.shop.config.ResponseCodeEnum;
import com.veer.shop.mapper.ProductMapper;
import com.veer.shop.param.ProductListParam;
import com.veer.shop.pojo.ImportProductData;
import com.veer.shop.pojo.Product;
import com.veer.shop.pojo.ProductStock;
import com.veer.shop.pojo.ResponseData;
import com.veer.shop.pojo.SimpleProduct;
import com.veer.shop.pojo.ValidResult;
import com.veer.shop.result.ProductResult;
import com.veer.shop.service.admin.ProductService;
import com.veer.shop.utils.InitUtil;
import com.veer.shop.utils.ResponseUtil;

/**
 * 商品业务实现类
 * 
 * @author WangBin
 * 2020年9月22日-上午9:45:59
 */
@Service
public class ProductServiceImpl implements ProductService {
	
	@Autowired
	ProductMapper productMapper;

	/**
	 * 新增|更新商品
	 */
	@Override
	public ResponseData<?> update(Product product) {
		// 校验参数
		ValidResult verifyResult = verifyProduct(product);
		int count = 0;
		if(verifyResult.getCode() == 0) {
			if(product.getProductId() > 0) {
				// 更新商品
				count = productMapper.update(product);
			} else {
				// 新增商品
				product.setCreatedAt(product.getUpdatedAt());
				count = productMapper.insert(product);
			}
			
			if(count > 0) {
				return ResponseUtil.success();
			} else {
				return ResponseUtil.error();
			}
		} else {
			return ResponseUtil.error(verifyResult.getMessage());
		}
	}

	/**
	 * 商品列表
	 */
	@Override
	public ResponseData<?> getList(ProductListParam param) {
		Map<String, Object> listResultMap = InitUtil.initListResultMap();
		Page page = PageMethod.startPage(param.getPageNo(), param.getPageSize());
		List<ProductResult> products = productMapper.getList(param);
		listResultMap.put("count", page.getTotal());
		listResultMap.put("list", products);
		return ResponseUtil.success(listResultMap);
	}

	/**
	 * 删除商品
	 */
	@Override
	public ResponseData<?> delete(String productId) {
		
		// 处理品牌ID
		String[] productIdList = productId.split(",");
		
		for(String id : productIdList) {
			productMapper.delete(Integer.parseInt(id));
		}
		
		return ResponseUtil.success();
	}

	/**
	 * 商品详情
	 */
	@Override
	public ResponseData<?> get(Integer productId) {
		// 查询品牌
		SimpleProduct product = productMapper.getById(productId);
		if(product == null)return ResponseUtil.error(ResponseCodeEnum.VIEW_PRODUCT_BRAND_ERROR.getMessage());
		return ResponseUtil.success(product);
	}

	/**
	 * 校验参数合法性
	 * 
	 * @param product
	 * @return
	 */
	private ValidResult verifyProduct(Product product) {
		
		ValidResult result = InitUtil.initFaildMap();
		
		// 商品名称
		if(StringUtils.isEmpty(product.getProductName())) {
			result.setMessage("商品名称不可为空！");
			return result;
		}
		// 商品编号
		if(StringUtils.isEmpty(product.getProductBn())) {
			result.setMessage("商品编号不可为空！");
			return result;
		}
		// 商品类型
		if(StringUtils.isEmpty(product.getProductType())) {
			result.setMessage("商品类型不可为空！");
			return result;
		}
		// 是否系统支持的商品类型
		if(!Constants.ALLOWED_PRODUCT_TYPE_LIST.contains(product.getProductType())) {
			result.setMessage("不支持的商品类型！");
			return result;
		}
		// 商品分类
		if(product.getCategoryId() == 0) {
			result.setMessage("商品分类不可为空！");
			return result;
		}
		// 销售价
		if(product.getSalesPrice().compareTo(BigDecimal.ZERO) < 0) {
			result.setMessage("商品销售价不可为空！");
			return result;
		}
		// 店铺
		if(product.getStoreId() > 0) {
			result.setMessage("店铺不存在！");
			return result;
		}
		if(product.getProductId() > 0) {
			// 查询商品
			SimpleProduct findProduct = productMapper.getById(product.getProductId());
			if(findProduct == null) {
				result.setMessage("商品不存在！");
				return result;
			}
			
			// 校验商品编号是否存在
			Integer checkProductBn = productMapper.checkProductBn(product.getProductId(), product.getProductBn());
			if(checkProductBn > 0) {
				result.setMessage("商品编号已存在！");
				return result;
			}
		} else {
			// 校验商品编号是否存在
			Integer checkProductBn = productMapper.isProductExist(null, product.getProductBn(), null);
			if(checkProductBn > 0) {
				result.setMessage("商品编号已存在！");
				return result;
			}
		}
		return InitUtil.initSuccMap();
	}
	
	/**
	 * 保存导入的商品
	 * 
	 * @param product
	 * @return
	 */
	@Transactional(rollbackFor = Exception.class)
	public void saveProductByBn(ImportProductData product) {
		// 判断商品是否存在
		Integer productId = productMapper.isProductExist(null, product.getProductBn(), null);
		if(productId != null) {
			// 更新商品
			Integer updateProduct = productMapper.updateImportProduct(product);
		} else {
			// 新增商品
			Integer insertProduct = productMapper.insertImportProduct(product);
			productId = product.getProductId();
			System.out.println("新增商品Id" + productId);
		}
		
		// 库存信息是否存在
		Integer stockId = productMapper.isStockExist(productId);
		ProductStock productStock = new ProductStock(product.getQty());
		productStock.setProductId(productId);
		if(stockId == null) {
			Integer insertStock = productMapper.insertStock(productStock);
		} else {
			Integer updateStock = productMapper.updateStock(productStock);
		}
	}
}